Cortex-M 处理器核心架构
整体架构框图
ARM Cortex-M 处理器核心架构:
┌─────────────────────────────────────────────────────────────┐
│ Cortex-M Processor Core │
├─────────────────┬─────────────────────────┬─────────────────┤
│ Register Bank │ Pipeline Stages │ Memory Interface │
│ │ │ │
│ ┌─────────────┐ │ ┌─────┐ ┌─────┐ ┌─────┐ │ ┌─────────────┐ │
│ │ R0-R12 │ │ │ Fetch││Decode││Execute│ │ AHB-Lite │ │
│ │ General │ │ │ │ │ │ │ │ │ Bus IF │ │
│ │ Purpose │ │ └─────┘ └─────┘ └─────┘ │ │ │
│ └─────────────┘ │ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────────────┐ │ │
│ │ R13 │ │ │ NVIC │ │ ┌─────────────┐ │
│ │ (SP) │ │ │ Nested Vectored │ │ │ MPU │ │
│ │ MSP/PSP │ │ │ Interrupt Ctrl │ │ │(Memory Prot │ │
│ └─────────────┘ │ └─────────────────────┘ │ │ Unit) │ │
│ ┌─────────────┐ │ │ └─────────────┘ │
│ │ R14 │ │ ┌─────────────────────┐ │ │
│ │ (LR) │ │ │ SysTick Timer │ │ ┌─────────────┐ │
│ └─────────────┘ │ └─────────────────────┘ │ │ Debug │ │
│ ┌─────────────┐ │ │ │ Interface │ │
│ │ R15 │ │ ┌─────────────────────┐ │ └─────────────┘ │
│ │ (PC) │ │ │ FPU │ │ │
│ └─────────────┘ │ │ (Cortex-M4/M7 etc.) │ │ │
│ ┌─────────────┐ │ └─────────────────────┘ │ │
│ │ xPSR │ │ │ │
│ │(APSR+IPSR+ │ │ │ │
│ │ EPSR) │ │ │ │
│ └─────────────┘ └─────────────────────────┘ └─────────────────┘
└─────────────────────────────────────────────────────────────┘
寄存器组详细结构
完整的寄存器体系
Cortex-M 完整寄存器集:
┌─────────────────────────────────────────────────────────────┐
│ 寄存器组 (Register Bank) │
├─────────────────────────┬───────────────────────────────────┤
│ 通用寄存器 │ 特殊功能寄存器 │
│ (16 × 32-bit) │ (Special Registers) │
├─────────────────────────┼───────────────────────────────────┤
│ R0 - 参数/结果/临时 │ xPSR - 程序状态寄存器 │
│ R1 - 参数/结果/临时 │ ├─ APSR (应用状态) │
│ R2 - 参数/结果/临时 │ ├─ IPSR (中断状态) │
│ R3 - 参数/结果/临时 │ └─ EPSR (执行状态) │
│ R4 - 变量寄存器 │ │
│ R5 - 变量寄存器 │ PRIMASK - 中断屏蔽 │
│ R6 - 变量寄存器 │ FAULTMASK - 故障屏蔽 │
│ R7 - 变量寄存器 │ BASEPRI - 基本优先级 │
│ R8 - 变量寄存器 │ CONTROL - 控制寄存器 │
│ R9 - 变量寄存器 │ │
│ R10 - 变量寄存器 │ MSP - 主栈指针 │
│ R11 - 变量寄存器 │ PSP - 进程栈指针 │
│ R12 - 临时寄存器 │ │
│ R13 - 栈指针 (SP) │ NVIC寄存器 - 中断控制 │
│ R14 - 链接寄存器 (LR) │ SCB寄存器 - 系统控制 │
│ R15 - 程序计数器 (PC) │ MPU寄存器 - 内存保护 │
└─────────────────────────┴───────────────────────────────────┘
处理器流水线结构
三级流水线细节
Cortex-M 三级流水线详细结构:
┌─────────────────────────────────────────────────────────────┐
│ 3-Stage Pipeline │
├─────────────┬──────────────┬──────────────┬──────────────────┤
│ 取指阶段 │ 译码阶段 │ 执行阶段 │ 写回阶段 │
│ (Fetch) │ (Decode) │ (Execute) │ (Write-back) │
├─────────────┼──────────────┼──────────────┼──────────────────┤
│ ┌─────────┐ │ ┌──────────┐ │ ┌──────────┐ │ │
│ │Instruction│ │ │Register │ │ │ ALU │ │ 寄存器写入 │
│ │ Memory │ │ │ Read │ │ │(Arithmetic│ │ 内存写入 │
│ │ │ │ │ │ │ │ Logic Unit)│ │ 分支解析 │
│ └─────────┘ │ └──────────┘ │ └──────────┘ │ │
│ │ │ ┌──────────┐ │ │
│ PC → 地址 │ 指令解码 │ │ Address │ │ 结果写回寄存器 │
│ 指令读取 │ 寄存器读取 │ │Calculation│ │ 或内存 │
│ 预取指缓冲 │ 产生控制信号 │ │ 单元 │ │ │
│ │ │ └──────────┘ │ │
│ 更新PC │ │ ┌──────────┐ │ │
│ │ │ │ Memory │ │ │
│ │ │ │ Access │ │ │
│ │ │ └──────────┘ │ │
└─────────────┴──────────────┴──────────────┴──────────────────┘
内存系统架构
总线矩阵和内存映射
Cortex-M 内存系统架构:
┌─────────────────────────────────────────────────────────────┐
│ Cortex-M Memory System │
├─────────────────┬─────────────────────────┬─────────────────┤
│ Code Memory │ SRAM/Data Memory │ Peripherals │
│ (Flash/ROM) │ (Internal) │ (AHB/APB) │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ Vector │ │ │ Stack │ │ │ GPIO │ │
│ │ Table │ │ │ Area │ │ │ UART │ │
│ │ │ │ │ │ │ │ SPI │ │
│ └─────────────┘ │ └─────────────┘ │ │ I2C │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ │ Timer │ │
│ │ Program │ │ │ Heap │ │ │ ADC/DAC │ │
│ │ Code │ │ │ │ │ └─────────────┘ │
│ │ │ │ └─────────────┘ │ │
│ └─────────────┘ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ │ .data │ │ │ System │ │
│ │ │ Section │ │ │ Peripherals │ │
│ │ │ │ │ │ NVIC, SCB, │ │
│ │ │ ┌─────────┐ │ │ │ SysTick, │ │
│ │ │ │ .bss │ │ │ │ MPU, etc. │ │
│ │ │ │ Section │ │ │ └─────────────┘ │
│ │ │ └─────────┘ │ │ │
└─────────────────┴─────────────────────────┴─────────────────┘
│
┌────────┴────────┐
│ AHB-Lite │
│ Bus Matrix │
└─────────────────┘
│
┌────────┴────────┐
│ Cortex-M │
│ Processor │
│ Core │
└─────────────────┘
嵌套向量中断控制器 (NVIC)
NVIC 架构
NVIC (Nested Vectored Interrupt Controller) 架构:
┌─────────────────────────────────────────────────────────────┐
│ NVIC 结构 │
├─────────────────┬─────────────────────────┬─────────────────┤
│ 中断优先级管理 │ 中断悬挂与控制 │ 异常处理 │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ 优先级寄存器 │ │ │ 悬挂寄存器 │ │ │ 向量表偏移 │ │
│ │ PRIO0-PRIOx │ │ │ PEND0-PENDx │ │ │ 寄存器 │ │
│ │ (8-bit │ │ │ │ │ │ │ │
│ │ per IRQ) │ │ └─────────────┘ │ └─────────────┘ │
│ └─────────────┘ │ ┌─────────────┐ │ ┌─────────────┐ │
│ ┌─────────────┐ │ │ 使能寄存器 │ │ │ 当前优先级 │ │
│ │ 优先级分组 │ │ │ EN0-ENx │ │ │ 寄存器 │ │
│ │ 寄存器 │ │ │ │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ │ ┌─────────────┐ │ │
│ │ │ 活动寄存器 │ │ │
│ │ │ ACT0-ACTx │ │ │
│ │ │ │ │ │
│ │ └─────────────┘ │ │
└─────────────────┴─────────────────────────┴─────────────────┘
系统控制块 (SCB) 和 SysTick
系统控制架构
系统控制块 (SCB) 和 SysTick 定时器:
┌─────────────────────────────────────────────────────────────┐
│ System Control Block │
├─────────────────┬─────────────────────────┬─────────────────┤
│ CPUID寄存器 │ 异常控制寄存器 │ SysTick定时器 │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ 处理器识别 │ │ │ SHPR2-3 │ │ │ 控制和状态 │ │
│ │ 信息 │ │ │ (系统处理程 │ │ │ 寄存器 │ │
│ │ │ │ │ 序优先级) │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ ICSR │ │ │ CCR │ │ │ 重载值 │ │
│ │(中断控制状态)│ │ │(配置和控制) │ │ │ 寄存器 │ │
│ │ │ │ │ │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ VTOR │ │ │ SHCSR │ │ │ 当前值 │ │
│ │(向量表偏移) │ │ │(系统处理程 │ │ │ 寄存器 │ │
│ │ │ │ │ 序控制状态) │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘
内存保护单元 (MPU)
MPU 架构
MPU (Memory Protection Unit) 内存保护架构:
┌─────────────────────────────────────────────────────────────┐
│ MPU 结构 │
├─────────────────┬─────────────────────────┬─────────────────┤
│ 区域寄存器 │ 属性控制 │ 故障检测 │
│ (8-16 regions)│ │ │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ RBAR0-15 │ │ │ MPU_CTRL │ │ │ MMAR │ │
│ │ (区域基地址) │ │ │ (控制) │ │ │(内存管理地址)│ │
│ │ │ │ │ │ │ │ 寄存器 │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ RLAR0-15 │ │ │ MPU_RNR │ │ │ BFAR │ │
│ │ (区域属性) │ │ │ (区域编号) │ │ │(总线故障地址)│ │
│ │ │ │ │ │ │ │ 寄存器 │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐ │ │
│ │ 区域大小 │ │ │ MPU_RASR │ │ │
│ │ 和属性 │ │ │ (区域属性) │ │ │
│ │ │ │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ │
└─────────────────┴─────────────────────────┴─────────────────┘
调试系统架构
调试接口和组件
Cortex-M 调试系统:
┌─────────────────────────────────────────────────────────────┐
│ Debug System │
├─────────────────┬─────────────────────────┬─────────────────┤
│ 调试接口 │ 调试组件 │ 跟踪单元 │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ SWD │ │ │ 断点单元 │ │ │ ITM │ │
│ │ (Serial Wire│ │ │ (FPB) │ │ │(指令跟踪) │ │
│ │ Debug) │ │ │ │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ JTAG │ │ │ 数据观察点 │ │ │ DWT │ │
│ │ (可选) │ │ │ (DWT) │ │ │(数据跟踪) │ │
│ │ │ │ │ │ │ │ │ │
│ └─────────────┘ │ └─────────────┘ │ └─────────────┘ │
│ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ │ ROM表 │ │ │ ETM │ │
│ │ │ (调试识别) │ │ │(嵌入式跟踪) │ │
│ │ │ │ │ │ │ │
│ │ └─────────────┘ │ └─────────────┘ │
└─────────────────┴─────────────────────────┴─────────────────┘
浮点单元 (FPU) - Cortex-M4/M7
FPU 架构
浮点单元 (FPU) - 可选组件:
┌─────────────────────────────────────────────────────────────┐
│ Floating Point Unit (FPU) │
├─────────────────┬─────────────────────────┬─────────────────┤
│ 浮点寄存器文件 │ 浮点运算单元 │ 浮点状态和控制 │
│ │ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │ ┌─────────────┐ │
│ │ S0-S31 │ │ │ 浮点加法器 │ │ │ FPSCR │ │
│ │ (32-bit │ │ │ │ │ │(浮点状态控制)│ │
│ │ 单精度) │ │ └─────────────┘ │ │ 寄存器 │ │
│ └─────────────┘ │ ┌─────────────┐ │ └─────────────┘ │
│ ┌─────────────┐ │ │ 浮点乘法器 │ │ │
│ │ D0-D15 │ │ │ │ │ │
│ │ (64-bit │ │ └─────────────┘ │ │
│ │ 双精度) │ │ ┌─────────────┐ │ │
│ └─────────────┘ │ │ 浮点除法/ │ │ │
│ │ │ 平方根单元 │ │ │
│ │ │ │ │ │
│ │ └─────────────┘ │ │
└─────────────────┴─────────────────────────┴─────────────────┘